var generateMatrix = function (n) {
  let a = new Array();
  for (let i = 0; i < n; i++) {
    a[i] = new Array();
  }
  let right = n - 1;
  let down = n - 1;
  let left = 0;
  let up = 0;

  for (let k = 1, i = 0, j = 0, turn = 'r'; k <= n * n; k++) {
    a[i][j] = k;
    if (turn == 'r') {
      j++;
      if (j == right) {
        up++;
        turn = 'd';
      }
    } else if (turn == 'd') {
      i++;
      if (i == down) {
        right--;
        turn = 'l';
      }
    } else if (turn == 'l') {
      j--;
      if (j == left) {
        down--;
        turn = 'u';
      }
    } else if (turn == 'u') {
      i--;
      if (i == up) {
        left++;
        turn = 'r';
      }
    }
  }
  return a;
}